
在计算机中，除了二进制，比较常用的还有八进制和十六进制。

\subsection{二进制}

二进制是计算机内部运算中采用的进制，在这样的进制系统下，只有 $0,1$ 两个数字，计算机内部的所有运算（包括位运算）都是在二进制的基础上进行的。

但用二进制表示数字会让数字过长，因此为了方便表示的需要，通常会把二进制数转换为八进制或十六进制表示。

\subsection{八进制}

在八进制下，有 $0,1,2,3,4,5,6,7$ 八个数字。

一般情况下，八进制数以 \texttt{oxx}（其中 \texttt{o} 为八进制的前缀，\texttt{xx} 代表八进制数）的形式来表示。

\subsection{十六进制}

在十六进制下，有 $0,1,2,3,4,5,6,7,8,9,A(10),B(11),C(12),D(13),E(14),F(15)$ 十六个数字。

十六进制与二进制相比，最大的优点就是表示的数字长度较短，一位十六进制数可以表示 4 位二进制数。

一般情况下，十六进制数以 \texttt{0xdbf}（其中 \texttt{0x} 为十六进制数的前缀）的形式来表示。

\subsection{进制间的相互转化}

\subsubsection{十进制转二进制 / 八进制 / 十六进制}

这里以二进制为例来演示，其他进制的原理与其类似。

整数部分，把十进制数不断执行除 2 操作，直至商数为 0。读余数从下读到上，即是二进制的整数部分数字。 小数部分，则用其乘 2，取其整数部分的结果，再用计算后的小数部分依此重复计算，算到小数部分全为 0 为止，之后从上到下，读所有计算后整数部分的数字，即为二进制的小数部分数字。

\begin{minted}{text}
将33.25转化为二进制数
整数部分：
33/2=16  ......1
16/2=8  ......0
8/2=4  ......0
4/2=2  ......0
2/2=1  ......0
1/2=0  ......1
小数部分：
0.25*2=0.5  0
0.5*2=1    1
\end{minted}

即 $33.25 = (100001.01)_2$

\subsubsection{二进制 / 八进制 / 十六进制转十进制}

还是以二进制为例。

二进制数转换为十进制数，只需将每个位的值，乘以 $2^i$ 次即可，其中 $i$ 为当前位的位数，个位的位数为 0。

\begin{minted}{text}
将11010.01(2)转换为十进制数
11010.01(2)=1*2^4+1*2^3+0*2^2+1*2^1+0*2^0+0*2^(-1)+1*2(-2)
        =26.25
\end{minted}

即 $(11010)_2 = (26.25)_{10}$

\subsubsection{二进制 / 八进制 / 十六进制间的相互转换}

一个八进制位可以用 3 个二进制位来表示（因为 $2^3 =8$ ）, 一个十六进制位可以用 4 个二进制位来表示（ $2^4 = 16$ ），反之同理。
